package cn.jcenterhome.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.jcenterhome.util.Common;
public class TreeService {
	private Map<Object, Map> data = new HashMap<Object, Map>();
	private Map<Object, List<Object>> child = new HashMap<Object, List<Object>>();
	private Map<Object, Integer> layer = new HashMap<Object, Integer>();
	private Map parent = new HashMap();
	private Object countId = 0;
	public TreeService() {
		child.put(-1, new ArrayList<Object>());
		layer.put(-1, -1);
	}
	public void setNode(int id, Object parent, Map value) {
		parent = !Common.empty(parent) ? parent : 0;
		data.put(id, value);
		List<Object> tempList = child.get(parent);
		if (tempList == null) {
			tempList = new ArrayList<Object>();
		}
		tempList.add(id);
		child.put(parent, tempList);
		this.parent.put(id, parent);
		if (layer.get(parent) == null) {
			layer.put(id, 0);
		} else {
			layer.put(id, layer.get(parent) + 1);
		}
	}
	public Map getValue(Object id) {
		return this.data.get(id);
	}
	public void getList(List<Object> tree, Object root) {
		List<Object> childList = this.child.get(root);
		if (childList != null) {
			for (Object id : childList) {
				tree.add(id);
				if (this.child.get(id) != null) {
					this.getList(tree, id);
				}
			}
		}
	}
	public List<Object> getChilds(Object id) {
		List<Object> child = new ArrayList<Object>();
		this.getList(child, id);
		return child;
	}
	public Integer getLayer(Object id, int space) {
		layer.put(id, 0);
		countId = id;
		reSetLayer(id);
		if (space > 0) {
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < this.layer.get(id); i++) {
				sb.append(space);
			}
			return Common.intval(sb.toString());
		} else {
			return this.layer.get(id);
		}
	}
	public void reSetLayer(Object id) {
		if (!Common.empty(parent.get(id))) {
			layer.put(countId, layer.get(countId) + 1);
			reSetLayer(parent.get(id));
		}
	}
}
